Flexbox
Grow, shrink, basis
Introduzione ai concetti flex-grow, flex-shrink e flex-basis
Nel sistema Flexbox, la dimensione degli elementi lungo l’asse principale è controllata da tre proprietà fondamentali: flex-grow, flex-shrink e flex-basis. TailwindCSS fornisce utility dedicate che permettono di gestire questi comportamenti in modo dichiarativo e coerente.
flex-basis: dimensione iniziale dell’elemento
flex-basis definisce la dimensione iniziale di un flex item prima che lo spazio disponibile venga distribuito.
Utility principali:
- basis-0 → flex-basis: 0px
- basis-auto → flex-basis: auto
- basis-full → flex-basis: 100%
- basis-1/2, basis-1/3, basis-1/4, ecc. → percentuali predefinite
- basis-[value] → valore arbitrario
Esempio: Un elemento con basis-1/2 occupa inizialmente il 50% dello spazio del container, indipendentemente dal contenuto.
Nota importante: flex-basis ha priorità su width quando l’elemento è un flex item.
flex-grow: espansione nello spazio disponibile
flex-grow controlla quanto un elemento può crescere rispetto agli altri quando c’è spazio libero nel container.
Utility principali:
- grow → flex-grow: 1
- grow-0 → flex-grow: 0
- grow-[value] → valore numerico personalizzato
Comportamento:
- grow-0 impedisce all’elemento di espandersi
- grow permette all’elemento di occupare lo spazio rimanente
- valori maggiori di 1 aumentano il peso relativo nella distribuzione
Esempio concettuale: Se due elementi hanno grow e grow-0, solo il primo si espande. Se due elementi hanno grow ma uno ha grow-2, quest’ultimo riceverà il doppio dello spazio.
flex-shrink: riduzione quando lo spazio non basta
flex-shrink definisce quanto un elemento può ridursi quando lo spazio totale è insufficiente.
Utility principali:
- shrink → flex-shrink: 1
- shrink-0 → flex-shrink: 0
- shrink-[value] → valore numerico personalizzato
Comportamento:
- shrink-0 impedisce all’elemento di ridursi, anche se causa overflow
- shrink consente la riduzione proporzionale
- valori più alti riducono l’elemento più velocemente rispetto agli altri
Caso comune: Usare shrink-0 per loghi, icone o sidebar che non devono comprimersi.
La shorthand flex e le utility correlate
In CSS, la proprietà flex è una shorthand per grow, shrink e basis. Tailwind fornisce utility che combinano questi valori.
Utility principali:
- flex-1 → flex: 1 1 0%
- flex-auto → flex: 1 1 auto
- flex-initial → flex: 0 1 auto
- flex-none → flex: 0 0 auto
Differenze chiave:
- flex-1 è ideale per layout fluidi e colonne responsive
- flex-auto rispetta la dimensione del contenuto ma consente crescita
- flex-none blocca completamente crescita e riduzione
Relazione tra grow, shrink e basis
Il browser calcola la dimensione finale seguendo questo ordine:
- Determinazione della flex-basis
- Verifica dello spazio disponibile
- Applicazione di flex-grow se c’è spazio libero
- Applicazione di flex-shrink se lo spazio è insufficiente
Implicazione pratica: Impostare basis-0 con grow garantisce una distribuzione uniforme, indipendente dal contenuto.
Pattern comuni di utilizzo
Colonne con larghezza uguale:
- basis-0 grow per tutti gli elementi
Sidebar fissa + contenuto fluido:
- Sidebar: shrink-0 basis-[larghezza]
- Contenuto: grow
Card responsive:
- flex-auto per adattarsi al contenuto
- grow per riempire righe incomplete
Uso con breakpoint responsive
Tutte le utility grow, shrink e basis supportano i breakpoint.
Esempio concettuale:
- basis-full su mobile
- md:basis-1/2 su tablet
- lg:basis-1/3 su desktop
Questo approccio consente layout completamente adattivi senza media query personalizzate.
Errori comuni da evitare
- Usare width al posto di basis sui flex item
- Dimenticare shrink-0 su elementi che non devono comprimersi
- Usare grow senza controllare la basis, causando distribuzioni inattese
- Mescolare flex-none con grow su elementi che devono essere fluidi